home *** CD-ROM | disk | FTP | other *** search
- /*
- File: InstrumentFormat.h
-
- Contains: xxx put contents here xxx
-
- Version:
-
- DRI:
-
- Copyright: © 1984-1994 by Apple Computer, Inc.
- All rights reserved.
-
- Warning: *** APPLE INTERNAL USE ONLY ***
- This file may contain unreleased API's
-
- BuildInfo: Built by: QuickTime
- With Interfacer: 1.1d11
- From: InstrumentFormat.i
- Revision: 4
- Dated: 6/23/95
- Last change by: GMA
- Last comment: InstKnobList was typedef'd twice causing rs6000 to choke.
-
- Bugs: Report bugs to Radar component “System Interfaces”, “Latest”
- List the version information (from above) in the Problem Description.
-
- */
-
- #ifndef __INSTRUMENTFORMAT__
- #define __INSTRUMENTFORMAT__
-
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #if GENERATINGPOWERPC
- #pragma options align=mac68k
- #endif
-
- #ifdef __CFM68K__
- #pragma import on
- #endif
-
-
- #ifndef __TYPES__
- #include <Types.h>
- #endif
- /* #include <ConditionalMacros.h> */
-
- #ifndef __SOUND__
- #include <Sound.h>
- #endif
- /* #include <MixedMode.h> */
-
- enum {
- /* kfiFlatInstrumentType = 'fi',*/
- kfiToneDescType = 'td',
- kfiKnobListType = 'kl',
- kfiSampleInfoType = 'si',
- kfiPitchInfoType = 'pi',
- kfiSampleDescType = 'sd',
- kfiLoopInfoType = 'li',
- kfiInstInfoType = 'ii',
- kfiPictType = 'ip',
- kfiAuthorType = 'ia',
- kfiCopyrightType = 'ic',
- kfiOtherStrType = 'io',
- kfiSampleDataType = 'dt',
- kfiNoteRequestInfoType = 'nr'
- };
-
- struct InstKnobRec {
- long number;
- long value;
- };
- typedef struct InstKnobRec InstKnobRec;
-
-
- enum {
- kInstKnobMissingUnknown = 0,
- kInstKnobMissingDefault = 1 << 0
- };
-
- struct InstKnobList {
- long knobCount;
- long knobFlags;
- InstKnobRec knob[1];
- };
- typedef struct InstKnobList InstKnobList;
-
- struct SamplePitchInfoRec {
- long pitch;
- long low;
- long high;
- };
- typedef struct SamplePitchInfoRec SamplePitchInfoRec;
-
-
- enum {
- instSamplePreProcessFlag = 1 << 0
- };
-
- struct InstSampleDescRec {
- OSType dataFormat;
- short numChannels;
- short sampleSize;
- UnsignedFixed sampleRate;
- short sampleDataID;
- long offset; /* offset within SampleData - this could be just for internal use*/
- long numSamples; /* this could also just be for internal use, we'll see*/
- };
- typedef struct InstSampleDescRec InstSampleDescRec;
-
-
- enum {
- loopTypeNormal = 0,
- loopTypeAlternating = 1 /* back & forth*/
- };
-
- struct LoopInfoRec {
- long loopType;
- long loopStart;
- long loopEnd;
- };
- typedef struct LoopInfoRec LoopInfoRec;
-
- typedef Handle AtomicInstrument;
-
- typedef Ptr AtomicInstrumentPtr;
-
- /*∑#ifndef forMasterInterfaces*/
-
- #ifdef __CFM68K__
- #pragma import off
- #endif
-
- #if GENERATINGPOWERPC
- #pragma options align=reset
- #endif
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* __INSTRUMENTFORMAT__ */
-
- //∑#ifndef forMasterInterfaces
- /*
- File: MusicComponent.i
-
- Copyright: © 1991-1995 by Apple Computer, Inc., all rights reserved.
-
- This file is used in these builds: Warhol
-
- Change History (most recent first):
-
- <71+> 6/27/95 dvb various
- <71> 6/27/95 JB Added back obsolete routines for compatability
- <70> 6/22/95 JB removed comments which confused .i generation
- <69> 6/21/95 JB Added knobID to knobDescription && changed parm names to
- knobIndex & knobID
- <68> 6/18/95 JB remove comment to satisfy interfacer
- <67> 6/16/95 JB SetFlatInstrument is gone, gone, gone
- <66> 6/14/95 JB first installment of new AtomicInstruments && put synthtypes
- here
- <65> 9-5-95 dvb
- <64> 28-4-95 dvb calls for component-based MIDI output
- <63+> calls for component based midi ports (such as macwavemaker and pas-16)
- <63> 6-4-95 dvb alter editinst api, add getnoterequest call
- <62> 3/28/95 JB Interfacer hates typedef enum
- <61> 24-3-95 dvb gap constants
- <60> 14-3-95 dvb values for reserved field of midipacket.
- <59> 6-1-95 dvb Settings
- <58> 22-12-94 dvb New knob types
- <57> 12/19/94 JLN New knob selectors for user interface
- <56> 7-12-94 dvb more synthesizer flags
- <55> 11/23/94 JB unsigned char ==> UInt8 in two structs
- <54> 24-10-94 dvb "default knob value
- <53> 7-10-94 dvb synthType should be synthesizerType, to match other names
- <52> 10/4/94 JB make build
- <51> 10/3/94 JB New Universal Interfaces
- <47> 7/20/94 dvb nubus support calls
- <46> 6/24/94 PH still trying to generate valid public interfaces
- <45> 6/21/94 PH header files were inconsistent betwixt public and private
- headers
- <44> 6/15/94 JB Remove Get/SetInstruments from public interface
- <43> 6/9/94 dvb remove a call or two.
- <42> 6/4/94 dvb FlatInstrument noodling
- <41> 5/29/94 dvb error code
- <40> 5/24/94 dvb MinorGroupStart bit in knobs
- <39> 5/23/94 dvb more bits
- <38> 5/13/94 dvb Removed some dead calls, and such. Changed drumkit number.
- <37> 5/6/94 dvb Redefined InstrumentDataHandle, added more knob types.
- <36> 4/14/94 dvb Remove MIDI Mgr calls from music components, to Note Allocator
- <35> 4/8/94 dvb Instrument About…
- <34+> 3/28/94 dvb Instrument About…
- <34> 3/28/94 dvb Various BW fixes
- <33> 3/9/94 dvb SetTuning selector
- <32> 3/7/94 JB …
- <31> 3/7/94 JB …
- <30> 3/7/94 JB PowerInterfacer sucks!
- <29> 3/6/94 JB UniversalHeaders changed CallComponentNow
- <28> 3/4/94 JB changes for music into QTcomponents.h
- <27> 3/1/94 dvb Flat Instrument
- <26> 2/28/94 JLN change definition of kKnobRealtime
- <25> 12/6/93 dvb Standard Sample Format
- <24> 11/5/93 dvb New calls, controllers
- <23+> 11/4/93 dvb Make error codes of form, 0x8000••••.
- <23> 11/3/93 dvb Header error in GetController
- <22> 10/20/93 dvb Add kKnobFlags for type description of knobs.
- <21> 10/1/93 dvb Remove some detritus.
- <20> 9/10/93 dvb GM Instrument Bits unsigned
- <19> 8/27/93 dvb Make knobs sensible. Packed instrument format eliminates the
- need for calls to operate on an instrument.
- <18+> 8/24/93 dvb Make knobs sensible. Packed instrument format
- eliminates the need for calls to operate on an
- instrument.
- <18> 8/24/93 dvb Redo the whole midi channel stuff. Make shorts into longs.
- <17> 7/12/93 dvb Wrong selector on Music Set Instruments.
- <16> 6/30/93 dvb //∑ #ifdef
- <15> 6/18/93 dvb Calls specific to Generic MIDI component.
- <14> 1/15/93 dvb Microtones R Us.
- <12+> 12/17/92 dvb More errors.
- <11+> 11/9/92 dvb Pan controller definition.
- <10> 10/26/92 dvb Synthesizer flags.
- <8+> 9/17/92 dvb Controllers are ±7.8 fixed point.
- <8> 9/14/92 dvb Made controllers signed 8.8.
- <6+> 9/3/92 dvb Redefine controllers in a safe & sane fashion.
- <6> 8/28/92 dvb Drum support.
- <4+> 8/3/92 dvb Revise some more.
- <4> 7/13/92 dvb Device knobs, & change how controllers work (a little).
- <3> 7/7/92 dvb
- <1+> 6/29/92 dvb New and improved.
-
- -----
- Used to be "MIDIComponent.h"
-
- <7+> 6/29/92 dvb Make it better.
- <7> 6/23/92 dvb Mine.
- <6> 6/1/92 dvb New tone definition
- <5> 4/22/92 dvb More.
- <4> 4/16/92 dvb More calls.
- <3> 4/3/92 dvb Expand, to allow for non-MIDI note-players, and note commands.
- <2> 7/5/91 dvb Just hackin.
-
- To Do:
- */
-
- //∑#endif forMasterInterfaces
-
- //∑#ifndef forMasterInterfaces
- #ifndef __Music__
- #define __Music__
- //∑#endif forMasterInterfaces
-
- #include <Movies.h>
-
-
-
- enum {
- kMusicComponentType = 'musi'
- };
-
- enum {
- kSoftSynthType = 'ss ',
- kGMSynthType = 'gm '
- };
-
-
- typedef ComponentInstance MusicComponent;
-
- // MusicSynthesizerFlags
- enum {
- kSynthesizerDynamicVoice = 1, /* can assign voices on the fly (else, polyphony is very important */
- kSynthesizerUsesMIDIPort = 2, /* must be patched through MIDI Manager */
- kSynthesizerMicrotone = 4, /* can play microtonal scales */
- kSynthesizerLimitedMicrotone = 8, /* can play microtones, but only on 1-voice parts */
- kSynthesizerMixedDrums = 16, /* any part can play drum parts, total = instrument parts */
- kSynthesizerSoftware = 32, /* implemented in main CPU software == uses cpu cycles */
- kSynthesizerHardware = 64, /* is a hardware device (such as nubus, or maybe DSP?) */
- kSynthesizerDynamicChannel = 128, /* can move any part to any channel or disable each part. (else we assume it lives on all channels in masks) */
- kSynthesizerHogsSystemChannel = 256, /* can be channelwise dynamic, but always responds on its system channel */
- kSynthesizerEditsMainChannel = 512, /* can only twiddle knobs on the main system channel */
- kSynthesizerSlowSetPart = 1024, /* SetPart() and SetInstrumentNumber() calls do not have rapid response, may glitch notes */
-
- kSynthesizerNeedsSystemChannel = 2048, /* The user need not be queried for system channel, example: GM synth */
- kSynthesizerCanBeMono = 4096, /* Synthesizer can be configured either mono or poly */
-
- kSynthesizerGMSuperset = 8192, /* synth is a GM device, with some voices beyond the GM set. (if set, kSynthesizerGM must also be set */
- kSynthesizerGM = 16384 /* synth is a GM device */
- };
-
- /*
- * Note that these controller numbers
- * are _not_ identical to the MIDI controller numbers.
- * These are _signed_ 8.8 values, and the LSB's are
- * always sent to a MIDI device. Controllers 32-63 are
- * reserved (for MIDI, they are LSB's for 0-31, but we
- * always send both).
- *
- * The full range, therefore, is -128.00 to 127.7f.
- *
- * _Excepting_ _volume_, all controls default to zero.
- *
- * Pitch bend is specified in fractional semitones! No
- * more "pitch bend range" nonsense. You can bend as far
- * as you want, any time you want.
- */
- enum MusicControllers {
- kControllerModulationWheel = 1,
- kControllerBreath = 2,
- kControllerFoot = 4,
- kControllerPortamentoTime = 5, /* portamento on/off is omitted, 0 time = 'off' */
- kControllerVolume = 7,
- kControllerBalance = 8,
- kControllerPan = 10, /* 0 - "default", 1 - n: positioned in output 1-n (incl fractions) */
- kControllerExpression = 11,
- kControllerLever1 = 16, /* general purpose controllers */
- kControllerLever2 = 17, /* general purpose controllers */
- kControllerLever3 = 18, /* general purpose controllers */
- kControllerLever4 = 19, /* general purpose controllers */
- kControllerLever5 = 80, /* general purpose controllers */
- kControllerLever6 = 81, /* general purpose controllers */
- kControllerLever7 = 82, /* general purpose controllers */
- kControllerLever8 = 83, /* general purpose controllers */
- kControllerPitchBend = 32, /* positive & negative semitones, with 7 bits fraction */
- kControllerAfterTouch = 33, /* aka channel pressure */
- kControllerSustain = 64, /* boolean - positive for on, 0 or negative off */
- kControllerSostenuto = 66, /* boolean */
- kControllerSoftPedal = 67, /* boolean */
- kControllerReverb = 91,
- kControllerTremolo = 92,
- kControllerChorus = 93,
- kControllerCeleste = 94,
- kControllerPhaser = 95
- };
-
- enum {
- kControllerMaximum = 0x7FFF, /* +01111111.11111111 */
- kControllerMinimum = 0x8000 /* -10000000.00000000 */
- };
-
- struct SynthesizerDescription {
- OSType synthesizerType; /* synthesizer type (must be same as component subtype) */
- Str31 name; /* text name of synthesizer type */
- unsigned long flags; /* from the above enum */
- unsigned long voiceCount; /* maximum polyphony */
-
- unsigned long partCount; /* maximum multi-timbrality (and midi channels) */
- unsigned long instrumentCount; /* non gm, built in (rom) instruments only */
- unsigned long modifiableInstrumentCount; /* plus n-more are user modifiable */
- unsigned long channelMask; /* (midi device only) which channels device always uses */
-
- unsigned long drumPartCount; /* maximum multi-timbrality of drum parts */
- unsigned long drumCount; /* non gm, built in (rom) drumkits only */
- unsigned long modifiableDrumCount; /* plus n-more are user modifiable */
- unsigned long drumChannelMask; /* (midi device only) which channels device always uses */
-
- unsigned long outputCount; /* number of audio outputs (usually two) */
- unsigned long latency; /* response time in µSec */
-
- unsigned long controllers[4]; /* array of 128 bits */
- unsigned long gmInstruments[4]; /* array of 128 bits */
- unsigned long gmDrums[4]; /* array of 128 bits */
- };
- typedef struct SynthesizerDescription SynthesizerDescription;
-
-
- enum {
- kVoiceCountDynamic = -1 /* constant to use to specify dynamic voicing */
- };
-
-
- struct ToneDescription {
- OSType synthesizerType; /* synthesizer type */
- Str31 synthesizerName; /* name of instantiation of synth */
- Str31 instrumentName; /* preferred name for human use */
- long instrumentNumber; /* inst-number used if synth-name matches */
- long gmNumber; /* Best matching general MIDI number */
- };
- typedef struct ToneDescription ToneDescription;
-
- enum {
- kFirstDrumkit = 16384, /* (first value is "no drum". instrument numbers from 16384->16384+128 are drumkits, and for GM they are _defined_ drumkits! */
- kLastDrumkit = (kFirstDrumkit+128)
- };
-
- // InstrumentMatch
- enum {
- kInstrumentMatchSynthesizerType = 1,
- kInstrumentMatchSynthesizerName = 2,
- kInstrumentMatchName = 4,
- kInstrumentMatchNumber = 8,
- kInstrumentMatchGMNumber = 16
- };
-
- // KnobFlags
- enum {
- kKnobRealtime = 1, /* Knob can be changed interactively as part of a sequence (ie knob can be changed at interrupt time) */
- kKnobNextNote = 2, /* Knob only takes effect on the next note played */
- kKnobAction = 4, /* setting the knob does something immediate */
- kKnobNotInstrument = 8, /* indicates that the knob isn't in the instrument handle */
- kKnobAffectsOthers = 16, /* other knobs will change value from this one */
- kKnobInterruptUnsafe = 32, /* only alter this knob from foreground task time (may access toolbox) */
- kKnobMinorGroupStart = 64, /* knob is first in some logical subgroup of knobs */
- kKnobGroupStart = 128, /* knob is first in some logical group of knobs */
-
- kKnobFixedPoint8 = 1024,
- kKnobFixedPoint16 = 2048,
-
- /* One of these may be used at a time. */
- kKnobTypeNumber = 0<<12,
- kKnobTypeGroupName = 1<<12, /* "knob" is really a group name for display purposes */
- kKnobTypeBoolean = 2<<12, /* if range is greater than 1, its a multi-checkbox field */
- kKnobTypeNote = 3<<12, /* knob range is equivalent to MIDI keys */
- kKnobTypePan = 4<<12, /* range goes left/right (lose this? ) */
- kKnobTypeInstrument = 5<<12, /* knob value = reference to another instrument number */
- kKnobTypeSetting = 6<<12, /* knob value is 1 of n different things (eg, fm algorithms) popup menu */
- kKnobTypeMilliseconds = 7<<12, /* knob is a millisecond time range */
- kKnobTypePercentage = 8<<12, /* knob range is displayed as a Percentage */
- kKnobTypeHertz = 9<<12 /* knob represents frequency */
- };
-
-
- enum {
- kUnknownKnobValue = 0x7FFFFFFF, /* a knob with this value means, we don't know it. */
- kDefaultKnobValue = 0x7FFFFFFE /* used to SET a knob to its default value. */
- };
-
- struct KnobDescription {
- Str31 name;
- long lowValue;
- long highValue;
- long defaultValue; /* a default instrument is made of all default values */
- long flags;
- long knobID;
- };
- typedef struct KnobDescription KnobDescription;
-
-
- #ifndef forMasterInterfaces
- struct InstrumentData {
- ToneDescription tone;
- long knobCount;
- long knob[1];
- };
- typedef struct InstrumentData InstrumentData, **InstrumentDataHandle;
-
-
- struct obsFlatInstrument {
- ToneDescription tone;
- long size; /* size in bytes of the following data, including size field (excluding tonedescription) */
- #ifdef forMasterInterfaces
- packed
- #endif forMasterInterfaces
- UInt8 data[4];
- };
- typedef struct obsFlatInstrument obsFlatInstrument;
- #endif forMasterInterfaces
-
- struct InstrumentAboutInfo {
- PicHandle p;
- Str255 author;
- Str255 copyright;
- Str255 other;
- };
- typedef struct InstrumentAboutInfo InstrumentAboutInfo;
-
-
- enum
- {
- kMusicPacketPortLost = 1, /* received when application loses the default input port */
- kMusicPacketPortFound, /* received when application gets it back out from under someone else's claim */
- kMusicPacketTimeGap /* data[0] = number of milliseconds to keep the MIDI line silent */
- };
-
- struct MusicMIDIPacket {
- unsigned short length;
- unsigned long reserved; /* if length zero, then reserved = above enum */
- #ifdef forMasterInterfaces
- packed
- #endif forMasterInterfaces
- UInt8 data[249];
- };
- typedef struct MusicMIDIPacket MusicMIDIPacket;
-
- typedef pascal ComponentResult (*MusicMIDISendProcPtr)(MusicComponent self,long refCon,MusicMIDIPacket *mmp);
- enum {
- uppMusicMIDISendProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(0, SIZE_CODE(sizeof(MusicComponent)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(MusicMIDIPacket *)))
- };
-
- #if USESROUTINEDESCRIPTORS
- typedef UniversalProcPtr MusicMIDISendUPP;
-
- #define CallMusicMIDISendProc(userRoutine, self, refCon, mmp) \
- CallUniversalProc((UniversalProcPtr)(userRoutine), uppMusicMIDISendProcInfo, (self), (refCon), (mmp))
- #define NewMusicMIDISendProc(userRoutine) \
- (MusicMIDISendUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppMusicMIDISendProcInfo, GetCurrentISA())
- #else
- typedef MusicMIDISendProcPtr MusicMIDISendUPP;
-
- #define CallMusicMIDISendProc(userRoutine, self, refCon, mmp) \
- (*(userRoutine))((self), (refCon), (mmp))
- #define NewMusicMIDISendProc(userRoutine) \
- (MusicMIDISendUPP)(userRoutine)
- #endif
-
- #pragma UPPSuite emitUPPTypes
-
- typedef pascal ComponentResult (*MusicMIDIReadHookProcPtr)(MusicMIDIPacket *mp, long myRefCon);
- enum {
- uppMusicMIDIReadHookProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(0, SIZE_CODE(sizeof(MusicMIDIPacket *)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))
- };
-
- #if USESROUTINEDESCRIPTORS
- typedef UniversalProcPtr MusicMIDIReadHookUPP;
-
- #define CallMusicMIDIReadHookProc(userRoutine, mp, myRefCon) \
- CallUniversalProc((UniversalProcPtr)(userRoutine), uppMusicMIDIReadHookProcInfo, (mp), (myRefCon))
- #define NewMusicMIDIReadHookProc(userRoutine) \
- (MusicMIDIReadHookUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppMusicMIDIReadHookProcInfo, GetCurrentISA())
- #else
- typedef MusicMIDIReadHookProcPtr MusicMIDIReadHookUPP;
-
- #define CallMusicMIDIReadHookProc(userRoutine, mp, myRefCon) \
- (*(userRoutine))((mp), (myRefCon))
- #define NewMusicMIDIReadHookProc(userRoutine) \
- (MusicMIDIReadHookUPP)(userRoutine)
- #endif
-
- #pragma UPPSuite emitUPPTypes
-
-
- /*--------------------------------*/
-
-
- enum
- {
- kMusicFirstSelect = 0,
- kMusicGetDescriptionSelect,
- kMusicGetPartSelect,
- kMusicSetPartSelect,
- kMusicSetInstrumentNumberSelect,
- kMusicGetInstrumentNumberSelect,
- kMusicStoreInstrumentSelect,
- kMusicGetInstrumentSelect,
- kMusicSetInstrumentSelect,
-
- kMusicGetAtomicInstrumentSelect,
- kMusicSetAtomicInstrumentSelect,
- kMusicDummyThree,
- kMusicDummyFour,
-
- kMusicGetInstrumentKnobDescriptionObsoleteSelect,
- kMusicGetDrumKnobDescriptionObsoleteSelect,
- kMusicGetKnobDescriptionObsoleteSelect,
-
- kMusicGetPartKnobSelect,
- kMusicSetPartKnobSelect,
- kMusicGetKnobSelect,
- kMusicSetKnobSelect,
-
- kMusicGetPartNameSelect,
- kMusicSetPartNameSelect,
-
- kMusicFindToneSelect,
-
- kMusicPlayNoteSelect,
- kMusicResetPartSelect,
- kMusicSetControllerSelect,
- kMusicGetControllerSelect,
-
- kMusicGetMIDIProcSelect,
- kMusicSetMIDIProcSelect,
-
- kMusicGetInstrumentNamesSelect,
- kMusicGetDrumNamesSelect,
-
- kMusicGetMasterTuneSelect,
- kMusicSetMasterTuneSelect,
-
- kMusicDummyFive,
-
- kMusicGetInstrumentAboutInfoSelect,
-
- kMusicGetDeviceConnectionSelect,
- kMusicUseDeviceConnectionSelect,
-
- kMusicGetInstrumentKnobSettingsSelect,
-
- kMusicGetMIDIPortsSelect,
- kMusicSendMIDISelect,
- kMusicReceiveMIDISelect,
-
- kMusicStartNonRealTimeSelect,
- kMusicSetNonRealTimeToSelect,
-
- kMusicGetInstrumentKnobDescriptionSelect,
- kMusicGetDrumKnobDescriptionSelect,
- kMusicGetKnobDescriptionSelect
-
- };
-
-
- //∑#ifndef forMasterInterfaces
- #define MusicError(x) (0x80000000 | ((unsigned short)(-2100 - x)) )
- //∑#endif forMasterInterfaces
-
- enum {
- notImplementedMusicErr = MusicError(1),
- cantSendToSynthesizerErr = MusicError(2),
- cantReceiveFromSynthesizerErr = MusicError(3),
- illegalVoiceAllocationErr = MusicError(4),
- illegalPartErr = MusicError(5),
- illegalChannelErr = MusicError(6),
- illegalKnobErr = MusicError(7),
- illegalKnobValueErr = MusicError(8),
- illegalInstrumentErr = MusicError(9),
-
- illegalControllerErr = MusicError(10),
- midiManagerAbsentErr = MusicError(11),
- synthesizerNotRespondingErr = MusicError(12),
- synthesizerErr = MusicError(13),
- illegalNoteChannelErr = MusicError(14),
- noteChannelNotAllocatedErr = MusicError(15),
- tunePlayerFullErr = MusicError(16),
- tuneParseErr = MusicError(17)
- };
-
- enum {
- kGMType = 'gm ' /* subtype for General MIDI music component */
- };
-
-
- /*-----------------------------------------
- Capabilities and Voice Allocation
- -----------------------------------------*/
-
- pascal ComponentResult
- MusicGetPart (MusicComponent mc, long part,
- long *midiChannel, long *polyphony)
- ComponentCallNow(kMusicGetPartSelect,12);
-
- pascal ComponentResult
- MusicSetPart (MusicComponent mc, long part,
- long midiChannel, long polyphony)
- ComponentCallNow(kMusicSetPartSelect,12);
-
-
- pascal ComponentResult
- MusicGetDescription ( MusicComponent mc, SynthesizerDescription *sd )
- ComponentCallNow(kMusicGetDescriptionSelect,4);
-
-
- pascal ComponentResult
- MusicGetInstrumentAboutInfo(MusicComponent mc,long part, InstrumentAboutInfo *iai)
- ComponentCallNow(kMusicGetInstrumentAboutInfoSelect,8);
-
- /*-----------------------------------------
- Instrument Loading and Storing
- -----------------------------------------*/
- pascal ComponentResult
- MusicSetInstrumentNumber(MusicComponent mc,long part, long instrumentNumber)
- ComponentCallNow(kMusicSetInstrumentNumberSelect,8);
-
- pascal ComponentResult
- MusicGetInstrumentNumber(MusicComponent mc,long part)
- ComponentCallNow(kMusicGetInstrumentNumberSelect,4);
-
- pascal ComponentResult
- MusicStoreInstrument(MusicComponent mc,long part, long instrumentNumber)
- ComponentCallNow(kMusicStoreInstrumentSelect,8);
-
- #if 0
- pascal ComponentResult
- MusicGetInstrument(MusicComponent mc,long part, InstrumentDataHandle *iH)
- ComponentCallNow(kMusicGetInstrumentSelect,8);
-
- pascal ComponentResult
- MusicSetInstrument(MusicComponent mc,long part, InstrumentDataHandle iH)
- ComponentCallNow(kMusicSetInstrumentSelect,8);
- #endif
-
- enum {
- getAtomicInstGetOriginalSamples = 1<<0,
- getAtomicInstGetExpandedSamples = 1<<1
- };
-
- pascal ComponentResult
- MusicGetAtomicInstrument(MusicComponent mc, long part, AtomicInstrument *ai, long flags)
- ComponentCallNow(kMusicGetAtomicInstrumentSelect,12);
-
- enum {
- setAtomicInstKeepOriginalSamples = 1<<0,
- setAtomicInstNeverPurgeSamples = 1<<1 // if set self-contained inst stays until app goes away
- };
-
- pascal ComponentResult
- MusicSetAtomicInstrument(MusicComponent mc, long part, AtomicInstrumentPtr aiP, long flags)
- ComponentCallNow(kMusicSetAtomicInstrumentSelect,12);
-
- /*-----------------------------------------
- Instrument Knobs
- -----------------------------------------*/
-
- pascal ComponentResult
- MusicGetInstrumentKnobDescription(MusicComponent mc,
- long knobIndex, KnobDescription *mkd)
- ComponentCallNow(kMusicGetInstrumentKnobDescriptionSelect,8);
-
- pascal ComponentResult
- MusicGetDrumKnobDescription(MusicComponent mc,
- long knobIndex, KnobDescription *mkd)
- ComponentCallNow(kMusicGetDrumKnobDescriptionSelect,8);
-
- pascal ComponentResult
- MusicGetInstrumentKnobSettings(MusicComponent mc,
- long knobIndex,Handle *settingsNames,
- Handle *settingsCategoryLasts,Handle *settingsCategoryNames)
- ComponentCallNow(kMusicGetInstrumentKnobSettingsSelect,16);
-
- pascal ComponentResult
- MusicGetPartKnob(MusicComponent mc,
- long part,long knobID)
- ComponentCallNow(kMusicGetPartKnobSelect,8);
-
- pascal ComponentResult
- MusicSetPartKnob(MusicComponent mc,
- long part,long knobID, long knobValue)
- ComponentCallNow(kMusicSetPartKnobSelect,12);
-
-
- /*-----------------------------------------
- Synthesizer Knobs
- -----------------------------------------*/
-
- pascal ComponentResult
- MusicGetKnobDescription(MusicComponent mc,
- long knobIndex, KnobDescription *mkd)
- ComponentCallNow(kMusicGetKnobDescriptionSelect,8);
-
- pascal ComponentResult
- MusicGetKnob(MusicComponent mc,
- long knobID)
- ComponentCallNow(kMusicGetKnobSelect,4);
-
- pascal ComponentResult
- MusicSetKnob(MusicComponent mc,
- long knobID, long knobValue)
- ComponentCallNow(kMusicSetKnobSelect,8);
-
- pascal ComponentResult
- MusicSetMasterTune(MusicComponent mc,long masterTune)
- ComponentCallNow(kMusicSetMasterTuneSelect,4);
-
- pascal ComponentResult
- MusicGetMasterTune(MusicComponent mc)
- ComponentCallNow(kMusicGetMasterTuneSelect,0);
-
-
-
- /*-----------------------------------------
- Names of Instruments
- -----------------------------------------*/
-
- pascal ComponentResult
- MusicGetPartName(MusicComponent mc, long part, Str31 name)
- ComponentCallNow(kMusicGetPartNameSelect,8);
-
- pascal ComponentResult
- MusicSetPartName(MusicComponent mc, long part, Str31 name)
- ComponentCallNow(kMusicSetPartNameSelect,8);
-
- pascal ComponentResult
- MusicFindTone(MusicComponent mc, ToneDescription *td,
- long *instrumentNumber, unsigned long *fit)
- ComponentCallNow(kMusicFindToneSelect,12);
-
-
- enum
- {
- kInstrumentNamesModifiable = 1,
- kInstrumentNamesBoth = 2
- };
-
- pascal ComponentResult
- MusicGetInstrumentNames(MusicComponent mc, long modifiableInstruments,
- Handle *instrumentNames,
- Handle *instrumentCategoryLasts,
- Handle *instrumentCategoryNames)
- ComponentCallNow(kMusicGetInstrumentNamesSelect,16);
-
- pascal ComponentResult
- MusicGetDrumNames(MusicComponent mc,
- long modifiableInstruments,
- Handle *instrumentNumbers,
- Handle *instrumentNames)
- ComponentCallNow(kMusicGetDrumNamesSelect,12);
-
-
- /*-----------------------------------------
- Realtime Actions
- -----------------------------------------*/
-
- pascal ComponentResult
- MusicPlayNote(MusicComponent mc, long part, long pitch, long velocity)
- ComponentCallNow(kMusicPlayNoteSelect,12);
-
- pascal ComponentResult
- MusicResetPart(MusicComponent mc, long part)
- ComponentCallNow(kMusicResetPartSelect,4);
-
- pascal ComponentResult
- MusicSetController(MusicComponent mc, long part,
- long controllerNumber,long controllerValue)
- ComponentCallNow(kMusicSetControllerSelect,12);
-
- pascal ComponentResult
- MusicGetController(MusicComponent mc, long part,
- long controllerNumber)
- ComponentCallNow(kMusicGetControllerSelect,8);
-
- /*-----------------------------------------
- Finding the Hardware
- -----------------------------------------*/
-
-
- pascal ComponentResult
- MusicGetMIDIProc(MusicComponent mc, MusicMIDISendUPP *midiSendProc, long *refCon)
- ComponentCallNow(kMusicGetMIDIProcSelect,8);
-
- pascal ComponentResult
- MusicSetMIDIProc(MusicComponent mc, MusicMIDISendUPP midiSendProc, long refCon)
- ComponentCallNow(kMusicSetMIDIProcSelect,8);
-
- pascal ComponentResult
- MusicGetDeviceConnection(MusicComponent mc,long index,long *id1,long *id2)
- ComponentCallNow(kMusicGetDeviceConnectionSelect,12);
-
- pascal ComponentResult
- MusicUseDeviceConnection(MusicComponent mc,long id1,long id2)
- ComponentCallNow(kMusicUseDeviceConnectionSelect,8);
-
-
-
- /*-----------------------------------------
- Component Based MIDIs
- (very optional calls)
- -----------------------------------------*/
- pascal ComponentResult MusicGetMIDIPorts(MusicComponent mc,
- long *inputPortCount,long *outputPortCount)
- ComponentCallNow(kMusicGetMIDIPortsSelect,8);
-
- pascal ComponentResult MusicSendMIDI(MusicComponent mc,
- long portIndex,MusicMIDIPacket *mp)
- ComponentCallNow(kMusicSendMIDISelect,8);
-
- pascal ComponentResult MusicReceiveMIDI(MusicComponent mc,
- MusicMIDIReadHookUPP readHook,long refCon)
- ComponentCallNow(kMusicReceiveMIDISelect,8);
-
-
-
- /*-----------------------------------------
- Non-RealTime Support
- -----------------------------------------*/
-
- typedef pascal ComponentResult (*MusicNonRealTimeDataProcPtr)(Ptr SoundData, long numBytes, long myRefCon);
- enum {
- uppMusicNonRealTimeDataProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(0, SIZE_CODE(sizeof(Ptr)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
- };
-
- #if USESROUTINEDESCRIPTORS
- typedef UniversalProcPtr MusicNonRealTimeDataUPP;
-
- #define CallMusicNonRealTimeDataProc(userRoutine, SoundData, numBytes, myRefCon) \
- CallUniversalProc((UniversalProcPtr)(userRoutine), uppMusicNonRealTimeDataProcInfo, (SoundData), (numBytes), (myRefCon))
- #define NewMusicNonRealTimeDataProc(userRoutine) \
- (MusicNonRealTimeDataUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppMusicNonRealTimeDataProcInfo, GetCurrentISA())
- #else
- typedef MusicNonRealTimeDataProcPtr MusicNonRealTimeDataUPP;
-
- #define CallMusicNonRealTimeDataProc(userRoutine, SoundData, numBytes, myRefCon) \
- (*(userRoutine))((SoundData), (numBytes), (myRefCon))
- #define NewMusicNonRealTimeDataProc(userRoutine) \
- (MusicNonRealTimeDataUPP)(userRoutine)
- #endif
-
- #pragma UPPSuite emitUPPTypes
-
- struct NonRealTimeSampleType {
- unsigned long numChannels; /*number of channels, ie mono = 1*/
- UnsignedFixed sampleRate; /*sample rate in Apples Fixed point representation*/
- unsigned short sampleSize; /*number of bits in sample*/
- };
- typedef struct NonRealTimeSampleType NonRealTimeSampleType;
-
- pascal ComponentResult MusicStartNonRealTime(MusicComponent mc,
- unsigned long *numChannels, UnsignedFixed *sampleRate, unsigned short *sampleSize,
- MusicNonRealTimeDataUPP dataProc, long dataProcRefCon)
- ComponentCallNow(kMusicStartNonRealTimeSelect,20);
-
- pascal ComponentResult MusicSetNonRealTimeTo(MusicComponent mc,
- long newTimeStamp )
- ComponentCallNow(kMusicSetNonRealTimeToSelect,4);
-
-
-
- /*-----------------------------------------
- Obsolete calls
- -----------------------------------------*/
-
- pascal ComponentResult
- MusicGetInstrumentKnobDescriptionObsolete(MusicComponent mc,
- long knobIndex, void *mkd)
- ComponentCallNow(kMusicGetInstrumentKnobDescriptionObsoleteSelect,8);
-
- pascal ComponentResult
- MusicGetDrumKnobDescriptionObsolete(MusicComponent mc,
- long knobIndex, void *mkd)
- ComponentCallNow(kMusicGetDrumKnobDescriptionObsoleteSelect,8);
-
- pascal ComponentResult
- MusicGetKnobDescriptionObsolete(MusicComponent mc,
- long knobIndex, void *mkd)
- ComponentCallNow(kMusicGetKnobDescriptionObsoleteSelect,8);
-
-
- //∑#ifndef forMasterInterfaces
- #endif __Music__
- //∑#endif forMasterInterfaces
-
- //∑#ifndef forMasterInterfaces
- /*
- File: NoteAllocatorComponent.h
-
- Written by: dvb
-
- Copyright: © 1992-1995 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <58> 6/27/95 dvb Remove MusicGetInstrument and instrumenthandles
- <57> 6/16/95 JB remove SetFlatInstrument calls
- <56> 6/14/95 JB First installment of Atomic Instruments
- <55> 9-5-95 dvb dead pickinst params are now longs
- <54+> make dead PickInst params into longs
- <54> 28-4-95 dvb new port type, of QT
- <53+> allow component-based MIDI ports
- <53> 4/6/95 PH change what david said so it builds again
- <52> 6-4-95 dvb remove old editinst, pickEdit supercedes. NAGetNoteRequest
- <51> 4-4-95 dvb edit from picker
- <50> 20-2-95 dvb NASendMIDI() call
- <49> 2/16/95 JB fix non-def of privateNoteChannel for MasterInterfaces
- <48> 30-1-95 dvb New editinst routine
- <47> 1/11/95 PH build w/ think c
- <46> 19-12-94 dvb Support for storing user instruments.
- <45+> add flags to NoteRequest
- <45> 9-12-94 dvb Support for non-midi-mgr midi ports.
- <44+> 7-12-94 dvb Support for non-midi-mgr midi ports
- <44> 7-12-94 dvb
- <43> 9-11-94 dvb
- <42+> NAPlayNote2 a playnote command with time & duration, for GetState purposes
- <42> 24-10-94 dvb Note channel state
- <41> 14-10-94 dvb New query call
- <40> 10/3/94 JB New Universal Interfaces
- <39> 27-9-94 dvb nubus support
- <38> 8/24/94 JB typedef enum -> enum
- <37> 7/20/94 dvb hardware synth support
- <36> 6/4/94 dvb Flat instruments and instruments.
- <35> 6/3/94 dvb Include refCon in PickInstrument
- <34> 5/29/94 dvb
- <33> 4/20/94 dvb Make 'GetStatusBlock' unbounded.
- <32> 4/15/94 dvb Copyright Dialog
- <31> 4/14/94 dvb Remove MIDI Mgr calls from music components, to Note Allocator
- <29+> 4/1/94 dvb Dont require midi.h
- <29> 3/9/94 dvb kNoteAllocatorType
- <28> 3/6/94 JB PowerInterfacer sucks && UniversalHeaders changed
- CallComponentNow
- <27> 3/5/94 dvb Another picker flag
- <26> 3/4/94 JB ProcPtr -> UPPs
- <25> 3/4/94 dvb Add more parameters to Instrument Picker .
- <24+> 2/20/94 dvb Arrangement Dialog Interface again!
- <24> 2/20/94 dvb Arrangement Dialog Interface again!
- <23> 2/20/94 dvb Arrangement Dialog
- <22> 2/14/94 dvb Fix arrange dialog
- <21> 2/14/94 dvb Easy connection to MIDI input.
- <20> 12/6/93 dvb Default MIDI Input port.
- <18+> 10/6/93 dvb Make types OSType
- <18> 8/24/93 dvb Fix selectors
- <17> 8/18/93 dvb Selector bugs (bw), remove inhibit call, jive with
- MusicComponent.h
- <16> 7/9/93 dvb Take out lame macros that I thought were so cool.
- <14+> 6/28/93 dvb //∑ #ifdef to create public header file.
- <14> 6/28/93 dvb
- <12+> 3/12/93 dvb Allocator Status Call.
- <12> 1/15/93 dvb Fast Dispatch
- <10+> 12/17/92 dvb Bad argument size on preroll
- <9+> 11/20/92 dvb Call to save configuration.
- <8+> 8/31/92 dvb Typical Polyphony
- <8> 8/28/92 dvb Better call set.
- <6+> 8/15/92 dvb Allow releasing of channels...
- <5+> 7/24/92 dvb Volume control from movie controller
- <5> 7/13/92 dvb Add in instrument-picker dialog
- <3+> 6/29/92 dvb Get the instrument you want.
- <2+> 6/25/92 dvb Put global-stuff into sys heap.
- <2> 6/23/92 dvb Pascal routines, dummyhead
- <1> 6/22/92 dvb first checked in
- */
-
- /*
- * P U B L I C I N T E R F A C E F O R N O T E A L L O C A T O R
- */
-
-
-
- #ifndef _NoteAllocator_
- #define _NoteAllocator_
-
- /*--------------------------
- Inclusions
- --------------------------*/
-
-
-
- //∑#endif forMasterInterfaces
-
- /*--------------------------
- Types
- --------------------------*/
-
- //∑#ifndef forMasterInterfaces
- #ifndef privateNoteAllocator
- //∑#endif forMasterInterfaces
-
-
- #ifdef forMasterInterfaces
- #pragma output notC
- typedef void *NoteChannel;
-
- #pragma output c
- struct NoteChannelRecord {
- long data[1];
- };
- typedef struct NoteChannelRecord NoteChannelRecord, *NoteChannel;
- #pragma output all
- #endif forMasterInterfaces
- #ifndef forMasterInterfaces
- typedef struct privateNoteChannel *NoteChannel;
- #endif forMasterInterfaces
-
- //∑#ifndef forMasterInterfaces
- #endif privateNoteAllocator
- //∑#endif forMasterInterfaces
-
- enum {
- kSynthesizerConnectionMono = 1, /* if set, and synth can be mono/poly, then the partCount channels from the system channel are hogged */
- kSynthesizerConnectionMMgr = 2, /* this connection imported from the MIDI Mgr */
- kSynthesizerConnectionOMS = 4, /* this connection imported from OMS */
- kSynthesizerConnectionQT = 8 /* this connection is a QuickTime-only port */
- };
-
- /* used for MIDI device only */
- struct SynthesizerConnections {
- OSType clientID;
- OSType inputPortID; /* terminology death: this port is used to SEND to the midi synth */
- OSType outputPortID; /* terminology death: this port receives from a keyboard or other control device */
- long midiChannel; /* The system channel; others are configurable (or the nubus slot number) */
- long flags;
- long unique; /* unique id may be used instead of index, to getinfo and unregister calls */
- long reserved1; /* should be zero */
- long reserved2; /* should be zero */
- };
- typedef struct SynthesizerConnections SynthesizerConnections;
-
- struct QTMIDIPort {
- SynthesizerConnections portConnections;
- Str63 portName;
- };
- typedef struct QTMIDIPort QTMIDIPort;
-
- #define kNoteRequestNoGM 1 /* dont degrade to a GM synth */
- #define kNoteRequestNoSynthType 2 /* dont degrade to another synth of same type but different name */
-
- struct NoteRequestInfo {
- UInt8 flags; /* 1: dont accept GM match, 2: dont accept same-synth-type match */
- UInt8 reserved; /* must be zero */
- short polyphony; /* Maximum number of voices */
- Fixed typicalPolyphony; /* Hint for level mixing */
- };
- typedef struct NoteRequestInfo NoteRequestInfo;
-
- struct NoteRequest {
- NoteRequestInfo info;
- ToneDescription tone;
- };
- typedef struct NoteRequest NoteRequest;
-
-
-
- enum {
- kNAFirstSelector = -7,
-
- kNATargetSelect,
- kNARegisterSelect,
- kNAVersionSelect,
- kNACanDoSelect,
- kNACloseSelect,
- kNAOpenSelect,
-
- kNARegisterMusicDeviceSelect,
- kNAUnregisterMusicDeviceSelect,
- kNAGetRegisteredMusicDeviceSelect,
- kNASaveMusicConfigurationSelect,
- kNANewNoteChannelSelect,
- kNADisposeNoteChannelSelect,
- kNAGetNoteChannelInfoSelect,
- kNAPrerollNoteChannelSelect,
- kNAUnrollNoteChannelSelect,
- kNAEngageNoteChannelSelect,
- kNADisengageNoteChannelSelect,
- kNASetNoteChannelVolumeSelect,
- kNAResetNoteChannelSelect,
- kNAPlayNoteSelect,
- kNASetControllerSelect,
- kNASetKnobSelect,
- kNAFindNoteChannelToneSelect,
- kNASetNoteChannelInstrumentSelect,
- kNAPickInstrumentSelect,
- kNAPickArrangementSelect,
- kNAGetStatusBlockSelect,
- kNASetDefaultMIDIInputSelect,
- kNAGetDefaultMIDIInputSelect,
- kNAGetNoteChannelStateSelect,
- kNASetNoteChannelStateSelect,
- kNAUseDefaultMIDIInputSelect,
- kNALoseDefaultMIDIInputSelect,
-
- kNAStuffToneDescriptionSelect,
-
- kNACopyrightDialogSelect,
-
- kNADummyOneSelect,
- kNADummyTwoSelect,
- // kNASetInstrumentSelect,
- kNAGetIndNoteChannelSelect,
-
- kNAPlayNote2Select,
-
- kNAGetMIDIPortsSelect,
- kNAGetNoteRequestSelect,
- kNASendMIDISelect,
- kNAPickEditInstrumentSelect,
-
- kNANewNoteChannelFromInstrumentSelect,
- kNASetAtomicInstrumentSelect,
-
- kNALastSelector
- };
-
- #ifndef forMasterInterfaces
- #undef NAComponentCall
- #undef NAComponentError
- #endif forMasterInterfaces
-
- typedef ComponentInstance NoteAllocator;
-
- enum {
- kPickDontMix = 1, /* dont mix instruments with drum sounds */
- kPickSameSynth = 2, /* only allow the same device that went in, to come out */
- kPickUserInsts = 4, /* show user insts in addition to ROM voices */
-
- kPickEditAllowEdit = 8, /* lets user switch over to edit mode */
- kPickEditAllowPick = 16, /* lets the user switch over to pick mode */
- kPickEditSynthGlobal = 32, /* edit the global knobs of the synth */
- kPickEditControllers = 64 /* edit the controllers of the notechannel */
- };
-
-
- enum {
- kNoteAllocatorType = 'nota'
- };
-
- /*--------------------------------
- Note Allocator Prototypes
- --------------------------------*/
-
- /*
- * System Configuration
- */
- pascal ComponentResult NARegisterMusicDevice(NoteAllocator na,
- OSType synthType,Str31 name,SynthesizerConnections *connections)
- ComponentCallNow(kNARegisterMusicDeviceSelect,12);
- pascal ComponentResult NAUnregisterMusicDevice(NoteAllocator na,
- long index)
- ComponentCallNow(kNAUnregisterMusicDeviceSelect,4);
-
- pascal ComponentResult NAGetRegisteredMusicDevice(NoteAllocator na,
- long index,
- OSType *synthType,Str31 name,SynthesizerConnections *connections,
- MusicComponent *mc)
- ComponentCallNow(kNAGetRegisteredMusicDeviceSelect,20);
-
- pascal ComponentResult NASetDefaultMIDIInput(NoteAllocator na,
- SynthesizerConnections *sc)
- ComponentCallNow(kNASetDefaultMIDIInputSelect,4);
-
- pascal ComponentResult NAGetDefaultMIDIInput(NoteAllocator na,
- SynthesizerConnections *sc)
- ComponentCallNow(kNAGetDefaultMIDIInputSelect,4);
-
-
- pascal ComponentResult NASaveMusicConfiguration(NoteAllocator na)
- ComponentCallNow(kNASaveMusicConfigurationSelect,0);
-
- /*
- * Allocation
- */
- pascal ComponentResult NANewNoteChannel(NoteAllocator na,
- NoteRequest *noteRequest,NoteChannel *outChannel)
- ComponentCallNow(kNANewNoteChannelSelect,8);
-
- pascal ComponentResult NANewNoteChannelFromInstrument(NoteAllocator na,
- AtomicInstrumentPtr instrument,NoteChannel *outChannel)
- ComponentCallNow(kNANewNoteChannelFromInstrumentSelect,8);
-
- pascal ComponentResult NADisposeNoteChannel(NoteAllocator na,NoteChannel noteChannel)
- ComponentCallNow(kNADisposeNoteChannelSelect,4);
-
- pascal ComponentResult NAGetNoteChannelInfo(NoteAllocator na,NoteChannel noteChannel,
- long *index,long *part)
- ComponentCallNow(kNAGetNoteChannelInfoSelect,12);
-
- pascal ComponentResult NAGetNoteRequest(NoteAllocator na,NoteChannel noteChannel,
- NoteRequest *nrOut)
- ComponentCallNow(kNAGetNoteRequestSelect,8);
-
- pascal ComponentResult NAUseDefaultMIDIInput(NoteAllocator na,MusicMIDIReadHookUPP readHook,long refCon,unsigned long flags)
- ComponentCallNow(kNAUseDefaultMIDIInputSelect,12);
-
- pascal ComponentResult NALoseDefaultMIDIInput(NoteAllocator na)
- ComponentCallNow(kNALoseDefaultMIDIInputSelect,0);
-
- pascal ComponentResult NAGetMIDIPorts(NoteAllocator na,
- Handle *inputPorts,Handle *outputPorts)
- ComponentCallNow(kNAGetMIDIPortsSelect,8);
-
- /*
- * Setup
- */
- pascal ComponentResult NAPrerollNoteChannel(NoteAllocator na,
- NoteChannel noteChannel)
- ComponentCallNow(kNAPrerollNoteChannelSelect,4);
-
- pascal ComponentResult NAUnrollNoteChannel(NoteAllocator na,
- NoteChannel noteChannel)
- ComponentCallNow(kNAUnrollNoteChannelSelect,4);
-
- pascal ComponentResult NAEngageNoteChannel(NoteAllocator na,
- NoteChannel noteChannel)
- ComponentCallNow(kNAEngageNoteChannelSelect,4);
-
- pascal ComponentResult NADisengageNoteChannel(NoteAllocator na,
- NoteChannel noteChannel, long silenceNotes)
- ComponentCallNow(kNADisengageNoteChannelSelect,8);
-
- pascal ComponentResult NAGetNoteChannelState(NoteAllocator na,
- NoteChannel noteChannel,
- long instrumentNumber, TimeValue t,Handle *state)
- ComponentCallNow(kNAGetNoteChannelStateSelect,16);
-
- pascal ComponentResult NASetNoteChannelState(NoteAllocator na,
- NoteChannel noteChannel,
- long instrumentNumber, unsigned long *state)
- ComponentCallNow(kNASetNoteChannelStateSelect,12);
-
- pascal ComponentResult NAResetNoteChannel(NoteAllocator na,NoteChannel noteChannel)
- ComponentCallNow(kNAResetNoteChannelSelect,4);
-
- pascal ComponentResult NASetNoteChannelVolume(NoteAllocator na,
- NoteChannel noteChannel, Fixed volume)
- ComponentCallNow(kNASetNoteChannelVolumeSelect,8);
-
- #if 0
- pascal ComponentResult NASetInstrument(NoteAllocator na,
- NoteChannel noteChannel, InstrumentData *instrumentData)
- ComponentCallNow(kNASetInstrumentSelect,8);
- #endif
-
- pascal ComponentResult NASetAtomicInstrument(NoteAllocator na,
- NoteChannel noteChannel,AtomicInstrumentPtr instrument,long flags)
- ComponentCallNow(kNASetAtomicInstrumentSelect,12);
-
-
-
- /*
- * Control
- */
- pascal ComponentResult NAPlayNote(NoteAllocator na,NoteChannel noteChannel,long pitch,long velocity)
- ComponentCallNow(kNAPlayNoteSelect,12);
-
- pascal ComponentResult NAPlayNote2(NoteAllocator na,NoteChannel noteChannel,long pitch,long velocity,TimeValue offTime)
- ComponentCallNow(kNAPlayNote2Select,16);
-
- pascal ComponentResult NASetController(NoteAllocator na,
- NoteChannel noteChannel, long controllerNumber,long controllerValue)
- ComponentCallNow(kNASetControllerSelect,12);
-
- pascal ComponentResult NASetKnob(NoteAllocator na,
- NoteChannel noteChannel, long knobNumber,long knobValue)
- ComponentCallNow(kNASetKnobSelect,12);
-
-
- pascal ComponentResult NAFindNoteChannelTone(NoteAllocator na,
- NoteChannel noteChannel, ToneDescription *td,long *instrumentNumber)
- ComponentCallNow(kNAFindNoteChannelToneSelect,12);
-
- pascal ComponentResult NASetNoteChannelInstrument(NoteAllocator na,
- NoteChannel noteChannel, long instrumentNumber)
- ComponentCallNow(kNASetNoteChannelInstrumentSelect,8);
-
-
- pascal ComponentResult NASendMIDI(NoteAllocator na,
- NoteChannel noteChannel, MusicMIDIPacket *mp)
- ComponentCallNow(kNASendMIDISelect,8);
-
-
- /*
- * User Interface
- */
-
- pascal ComponentResult NAPickInstrument(NoteAllocator na,
- ModalFilterUPP filterProc,
- StringPtr prompt,ToneDescription *sd,
- unsigned long flags,long refCon,long reserved1,
- long reserved2)
- ComponentCallNow(kNAPickInstrumentSelect,28);
-
- pascal ComponentResult NAStuffToneDescription(NoteAllocator na,
- long gmNumber,ToneDescription *td)
- ComponentCallNow(kNAStuffToneDescriptionSelect,8);
-
- pascal ComponentResult NAPickArrangement(NoteAllocator na,
- ModalFilterUPP filterProc,
- StringPtr prompt,
- long partCount, NoteRequest *noteRequestList,
- Track t,StringPtr songName)
- ComponentCallNow(kNAPickArrangementSelect,24);
-
- pascal ComponentResult NACopyrightDialog(NoteAllocator na,
- PicHandle p,
- StringPtr author,
- StringPtr copyright,
- StringPtr other,
- StringPtr title,
- ModalFilterProcPtr filterProc,
- long refCon)
- ComponentCallNow(kNACopyrightDialogSelect,28);
-
- pascal ComponentResult NAPickEditInstrument(NoteAllocator na,
- ModalFilterUPP filterProc,
- StringPtr prompt,
- long refCon,
- NoteChannel nc,
- AtomicInstrument ai,long flags)
- ComponentCallNow(kNAPickEditInstrumentSelect,24);
-
- /*
- * Note Allocator interior views
- */
-
- struct NAStatPiece {
- Str31 clientName;
- Str31 synthesizerName;
- long part;
- long midiChannel;
- long polyphony;
- long valid;
- };
- typedef struct NAStatPiece NAStatPiece;
-
- struct NAStat {
- long pieceCount;
- NAStatPiece piece[64];
- };
- typedef struct NAStat NAStat;
-
- pascal ComponentResult NAGetStatusBlock(NoteAllocator na, NAStat *stat)
- ComponentCallNow(kNAGetStatusBlockSelect,4);
-
- pascal ComponentResult NAGetIndNoteChannel(NoteAllocator na, long index, NoteChannel *nc)
- ComponentCallNow(kNAGetIndNoteChannelSelect,8);
-
-
- //∑#ifndef forMasterInterfaces
- #endif _NoteAllocator_
- //∑#endif forMasterInterfaces
-
-
-
-
- //∑#ifndef forMasterInterfaces
-
- /*
- File: TunePlayerComponent.h
-
- Copyright: © 1992-1994 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <25> 9-11-94 dvb
- <24+> GetTunePlayerState
- <24> 10/3/94 JB New Universal Interfaces
- <23> 19-9-94 dvb looping
- <22> 7/20/94 dvb Allow user-assigned note channels, and callout procedure.
- <21> 6/1/94 dvb TuneStatus could be cool.
- <20> 5/29/94 dvb error code
- <19> 3/15/94 dvb Queueflag to .exclude. notes at end of sample
- <18> 3/6/94 JB PowerInterfacer sucks && UniversalHeaders changed
- CallComponentNow
- <17> 3/4/94 JB .h -> .i
- <16> 3/4/94 dvb Dont clip notes at end of sample.
- <15> 2/14/94 dvb Remove TuneGetInfo call
- <14> 1/28/94 dvb Fix some header inconsistencies.
- <13> 1/24/94 dvb Change TuneQueue interface
- <12> 12/18/93 dvb Tune header in parseable form.
- <11> 12/6/93 dvb TuneGetVolume changes.
- <10> 8/18/93 dvb TuneSet/GetVolume (bw)
- <8+> 8/2/93 dvb Constant for queuedepth
- <7+> 6/28/93 dvb //∑ #ifdef to create public header file.
- <7> 6/18/93 dvb Incorporate API review suggestions
- <6> 9/17/92 dvb
- <5> 9/9/92 dvb Tune segment.
- <4> 9/7/92 dvb Scrubbing support.
- <3> 9/3/92 dvb Revamp the call set.
- <1+> 7/24/92 dvb Volume control from movie controller
-
- To Do: Add rate control into TuneQueue
-
- */
-
- /*
- File: Tune.h
-
- Written by: dvb
-
- Copyright: © 1992 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
- */
-
- /*
- * P U B L I C I N T E R F A C E F O R T U N E P L A Y E R
- */
-
-
-
- #ifndef _Tune_
- #define _Tune_
-
-
- /*--------------------------
- Inclusions
- --------------------------*/
-
-
- //∑#endif forMasterInterfaces
-
-
-
- /*--------------------------
- Types
- --------------------------*/
-
- enum {
- kTuneQueueDepth = 8 /* Deepest you can queue tune segments */
- };
-
-
- struct TuneStatus {
- unsigned long *tune; /* currently playing tune */
- unsigned long *tunePtr; /* position within currently playing piece */
- TimeValue time; /* current tune time */
- short queueCount; /* how many pieces queued up? */
- short queueSpots; /* How many more tunepieces can be queued */
- TimeValue queueTime; /* How much time is queued up? (can be very inaccurate) */
- long reserved[3];
- };
- typedef struct TuneStatus TuneStatus;
-
- enum {
- kStopTuneFade = 1, /* do a quick, synchronous fadeout */
- kStopTuneSustain = 2, /* don't silece notes */
- kStopTuneInstant = 4, /* silence notes fast (else, decay them) */
- kStopTuneReleaseChannels = 8 /* afterwards, let the channels go */
- };
-
- enum {
- kTuneSelect = 3,
- kTuneSetHeaderSelect,
- kTuneGetTimeBaseSelect,
- kTuneSetTimeScaleSelect,
- kTuneGetTimeScaleSelect,
- kTuneGetIndexedNoteChannelSelect,
- kTuneDummy,
- kTuneQueueSelect,
- kTuneInstantSelect,
- kTuneGetStatusSelect,
- kTuneStopSelect,
- kTuneResumeSelect,
- kTuneFlushSelect,
- kTuneSetVolumeSelect,
- kTuneGetVolumeSelect,
- kTunePrerollSelect,
- kTuneUnrollSelect,
- kTuneSetNoteChannelsSelect,
- kTuneSetPartTransposeSelect,
- kTuneGetStateSelect,
- kTuneLastSelector
- };
-
- typedef pascal void (*TuneCallBackProcPtr)(const TuneStatus *status, long refCon);
-
- enum {
- uppTuneCallBackProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(0, SIZE_CODE(sizeof(TuneStatus *)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))
- };
-
- #if USESROUTINEDESCRIPTORS
- typedef UniversalProcPtr TuneCallBackUPP;
-
- #define CallTuneCallBackProc(userRoutine, status, refCon) \
- CallUniversalProc((UniversalProcPtr)(userRoutine), uppTuneCallBackProcInfo, (status), (refCon))
- #define NewTuneCallBackProc(userRoutine) \
- (TuneCallBackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTuneCallBackProcInfo, GetCurrentISA())
- #else
- typedef TuneCallBackProcPtr TuneCallBackUPP;
-
- #define CallTuneCallBackProc(userRoutine, status, refCon) \
- (*(userRoutine))((status), (refCon))
- #define NewTuneCallBackProc(userRoutine) \
- (TuneCallBackUPP)(userRoutine)
- #endif
-
- typedef pascal void (*TunePlayCallBackProcPtr)(unsigned long *event,long seed,long refCon);
-
- enum {
- uppTunePlayCallBackProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(0, SIZE_CODE(sizeof(unsigned long*)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
- };
-
- #if USESROUTINEDESCRIPTORS
- typedef UniversalProcPtr TunePlayCallBackUPP;
-
- #define CallTunePlayCallBackProc(userRoutine, event, seed, refCon) \
- CallUniversalProc((UniversalProcPtr)(userRoutine), uppTunePlayCallBackProcInfo, (event), (seed), (refCon))
- #define NewTunePlayCallBackProc(userRoutine) \
- (TunePlayCallBackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTunePlayCallBackProcInfo, GetCurrentISA())
- #else
- typedef TunePlayCallBackProcPtr TunePlayCallBackUPP;
-
- #define CallTunePlayCallBackProc(userRoutine, event, seed, refCon) \
- (*(userRoutine))((event), (seed), (refCon))
- #define NewTunePlayCallBackProc(userRoutine) \
- (TunePlayCallBackUPP)(userRoutine)
- #endif
-
- #pragma UPPSuite emitUPPTypes
-
- typedef ComponentInstance TunePlayer;
-
- enum {
- kMaxTunePlayerParts = 32,
-
- kTunePlayerType = 'tune'
- };
-
- /*--------------------------
- Prototypes
- --------------------------*/
-
-
- pascal ComponentResult TuneSetHeader(TunePlayer tp,
- unsigned long *header)
- ComponentCallNow(kTuneSetHeaderSelect,4);
-
- pascal ComponentResult TuneSetNoteChannels(TunePlayer tp,
- unsigned long count,NoteChannel *noteChannelList,
- TunePlayCallBackUPP playCallBackProc,
- long refCon)
- ComponentCallNow(kTuneSetNoteChannelsSelect,16);
-
-
- pascal ComponentResult TuneSetPartTranspose(TunePlayer tp,
- unsigned long part,
- long transpose,
- long velocityShift)
- ComponentCallNow(kTuneSetPartTransposeSelect,12);
-
- pascal ComponentResult TuneGetTimeBase(TunePlayer tp,
- TimeBase *tb)
- ComponentCallNow(kTuneGetTimeBaseSelect,4);
-
- pascal ComponentResult TuneSetTimeScale(TunePlayer tp,
- TimeScale scale)
- ComponentCallNow(kTuneSetTimeScaleSelect,4);
-
- pascal ComponentResult TuneGetTimeScale(TunePlayer tp,
- TimeScale *scale)
- ComponentCallNow(kTuneGetTimeScaleSelect,4);
-
- pascal ComponentResult TuneGetIndexedNoteChannel(TunePlayer tp,
- long i, NoteChannel *nc)
- ComponentCallNow(kTuneGetIndexedNoteChannelSelect,8);
-
-
- /* Values for when to start. */
- enum {
- kTuneStartNow = 1, /* start after buffer is implied */
- kTuneDontClipNotes = 2, /* allow notes to finish their durations outside sample */
- kTuneExcludeEdgeNotes = 4, /* dont play notes that start at end of tune */
- kTuneQuickStart = 8, /* Leave all the controllers where they are, ignore start time */
- kTuneLoopUntil = 16, /* loop a queued tune if there's nothing else in the queue */
- kTuneStartNewMaster = 16384
- };
-
- pascal ComponentResult TuneQueue(TunePlayer tp,
- unsigned long *tune,
- Fixed tuneRate,
- unsigned long tuneStartPosition,
- unsigned long tuneStopPosition,
- unsigned long queueFlags,
- TuneCallBackUPP callBackProc,
- long refCon)
- ComponentCallNow(kTuneQueueSelect,28);
-
- pascal ComponentResult TuneInstant(TunePlayer tp,
- unsigned long *tune,
- long tunePosition)
- ComponentCallNow(kTuneInstantSelect,8);
-
- pascal ComponentResult TuneGetStatus(TunePlayer tp,
- TuneStatus *status)
- ComponentCallNow(kTuneGetStatusSelect,4);
-
- /* Values for when to start. */
- enum {
- kStopSustain = 1, /* Leaves notes playing, not silent */
- kStopFadeout = 2 /* Does a synchronous fade-out */
- };
-
- pascal ComponentResult TuneStop(TunePlayer tp,
- long stopFlags)
- ComponentCallNow(kTuneStopSelect,4);
-
- pascal ComponentResult TuneResume(TunePlayer tp)
- ComponentCallNow(kTuneResumeSelect,0);
-
- pascal ComponentResult TuneFlush(TunePlayer tp)
- ComponentCallNow(kTuneFlushSelect,0);
-
- pascal ComponentResult TuneSetVolume(TunePlayer tp,
- Fixed volume)
- ComponentCallNow(kTuneSetVolumeSelect,4);
-
- pascal ComponentResult TuneGetVolume(TunePlayer tp)
- ComponentCallNow(kTuneGetVolumeSelect,0);
-
- pascal ComponentResult TunePreroll(TunePlayer tp)
- ComponentCallNow(kTunePrerollSelect,0);
-
- pascal ComponentResult TuneUnroll(TunePlayer tp)
- ComponentCallNow(kTuneUnrollSelect,0);
-
- pascal ComponentResult TuneGetState(TunePlayer tp,
- TimeValue t,Handle *state)
- ComponentCallNow(kTuneGetStateSelect,8);
-
-
-
- //∑#ifndef forMasterInterfaces
- #endif _Tune_
- //∑#endif forMasterInterfaces
- //∑#ifndef forMasterInterfaces
- /*
- File: MusicMediaHandler.h
-
- Contains: xxx put contents here xxx
-
- Written by: xxx put writers here xxx
-
- Copyright: © 1991-1995 by Apple Computer, Inc., all rights reserved.
-
- This file is used in these builds: Warhol
-
- Change History (most recent first):
-
- <8> 1/20/95 JB fixes for building master interfaces
- <7> 10/3/94 JB New Universal Interfaces
- <6> 6/13/94 JB Bump thing version numbers
- <5> 3/6/94 JB PowerInterfacer sucks!
- <4> 3/4/94 dvb Corrected musicdescription
- <3> 12/18/93 dvb General opcodes
- <2> 12/17/93 dvb Test
- <1+> 8/4/93 dvb ∑∑ for public release thingie
- <12> 1/18/93 dvb
- <12> 1/15/93 dvb
- <12> 10/26/92 dvb Use this file for something.
- <10+> 5/10/92 dvb Totally different media handler.
- <10> 11/21/91 dvb Bring into the present, November 1991.
- <9> 7/27/91 JB Put flags into MusicMediaInfoHeader
- <8> 7/26/91 dvb Delegate the hard stuff.
- <7> 7/25/91 dvb More like Music.
- <6> 7/20/91 JB SampleTable and ChunkCache changes
- <5> 7/18/91 dvb Now it does a simple form of Music, really.
- <4> 7/15/91 MD compile
- <3> 7/5/91 dvb Stuff.
- <2> 7/2/91 dvb Make Music component do something.
-
- To Do:
- */
-
-
- #ifndef _MusicMedia_
- #define _MusicMedia_
-
- #define kMusicVersion 0x00040001
- #define MusicMediaInfoHeaderAID 'tmhd'
-
- //∑#endif forMasterInterfaces
-
- //$$$BEGINMUSICTYPES
-
- /*--------------------------
- Music Sample Description
- --------------------------*/
- #if 0
- struct MusicDescription {
- long descSize;
- long dataFormat; /* 'musi' */
-
- long resvd1;
- short resvd2;
- short dataRefIndex;
-
- long musicFlags;
- unsigned long headerData[1]; /* variable size! */
-
- };
- typedef struct MusicDescription MusicDescription;
- typedef MusicDescription *MusicDescriptionPtr;
- typedef MusicDescriptionPtr *MusicDescriptionHandle;
- #endif
- //$$$ENDMUSICTYPES
-
- //∑#ifndef forMasterInterfaces
- #endif _MusicMedia_
- //∑#endif forMasterInterfaces
- //∑#ifndef forMasterInterfaces
- /*
- File: MusicTrackEvent.h
-
- Contains: QuickTime Music Track Event defines
-
- Written by: Tim Schaaff
-
- Copyright: © 1992-1995 by Apple Computer, Inc., all rights reserved.
-
- This file is used in these builds: Warhol
-
- Change History (most recent first):
-
- <13> 6/14/95 JB first installment of new AtomicInstruments
- <12> 6/10/95 dvb rename the macro "instrument" to "part"
- <11> 11-4-95 dvb xcontrol macros never worked
- <10+> oh dear, the xcontrol extraction macros never worked, now, did they?
- <10> 2/16/95 JB Changed some 1 -> 1L to make 16-bit word people happy
- <9> 9-11-94 dvb
- <8> 10/3/94 JB New Universal Interfaces
- <7> 6/4/94 dvb Embedded Flatinstruments
- <6> 4/20/94 dvb Some opcodes.
- <5> 3/6/94 JB removed ushort & ulong
- <4> 3/1/94 dvb Error with negative control values, add some knob stuffs.
- <3> 2/15/94 dvb Fix Stuffproblem on long controller and knobs (thanks, bw!)
- <2> 12/18/93 dvb General opcodes
- <7> 12/6/93 dvb Make the XNotePitch a single 16 bit field.
- <5+> 8/4/93 dvb //∑Public Releasable
- <4+> 5/8/93 dvb Long-bugs.
- <3+> 5/4/93 dvb More music not midi.
- <2+> 3/8/93 dvb Fractions in xnote
- <1> 6/23/92 TIM first check in
-
- To Do:
- */
-
- #ifndef __MusicTrackEvent__
- #define __MusicTrackEvent__
-
- //∑#endif forMasterInterfaces
-
- typedef unsigned long MusicOpWord, *MusicOpWordPtr;
-
- /* QuickTime Music Track Event Formats:
-
- At this time, QuickTime music tracks support 5 different event types -- REST events,
- short NOTE events, short CONTROL events, short GENERAL events, Long NOTE events,
- long CONTROL events, and variable GENERAL events.
-
- • REST Event (4 bytes/event):
-
- (0 0 0) (5-bit UNUSED) (24-bit Rest Duration)
-
- • Short NOTE Events (4 bytes/event):
-
- (0 0 1) (5-bit Part) (6-bit Pitch) (7-bit Volume) (11-bit Duration)
-
- where: Pitch is offset by 32 (Actual pitch = pitch field + 32)
-
- • Short CONTROL Events (4 bytes/event):
-
- (0 1 0) (5-bit Part) (8-bit Controller) (1-bit UNUSED) (1-bit Sign) (7-bit MSB) (7-bit LSB)
- ( or 15-bit Signed Value)
- • Short GENERAL Event (4 bytes/event):
-
- (0 1 1) (1-bit UNUSED) (12-bit Sub-Type) (16-bit Value)
-
- • Long NOTE Events (8 bytes/event):
-
- (1 0 0 1) (12-bit Part) (1-bit UNUSED) (7-bit Pitch) (1-bit UNUSED) (7-bit Volume)
- (1 0) (8-bit UNUSED) (22-bit Duration)
-
- • Long CONTROL Event (8 bytes/event):
-
- (1 0 1 0) (12-bit Part) (16-bit Value MSB)
- (1 0) (14-bit Controller) (16-bit Value LSB)
-
- • Long KNOB Event (8 bytes/event):
-
- (1 0 1 1) (12-bit Sub-Type) (16-bit Value MSB)
- (1 0) (14-bit KNOB) (16-bit Value LSB)
-
- • Variable GENERAL Length Events (N bytes/event):
-
- (1 1 1 1) (12-bit Sub-Type) (16-bit Length)
- :
- (32-bit Data values)
- :
- (1 1) (14-bit UNUSED) (16-bit Length)
-
- where: Length field is the number of LONG words in the record.
- Lengths include the first and last long words (Minimum length = 2)
-
- The following event type values have not been used yet and are reserved for
- future expansion:
-
- • (1 0 0 0) (8 bytes/event)
- • (1 1 0 0) (N bytes/event)
- • (1 1 0 1) (N bytes/event)
- • (1 1 1 0) (N bytes/event)
-
- For all events, the following generalizations apply:
-
- - All duration values are specified in Millisecond units.
- - Pitch values are intended to map directly to the MIDI key numbers.
- - Controllers from 0 to 127 correspond to the standard MIDI controllers.
- Controllers greater than 127 correspond to other controls (i.e., Pitch Bend,
- Key Pressure, and Channel Pressure).
- */
-
-
- // Defines for the implemented music event data fields
- enum {
- kRestEventType = 0x0L, /* lower 3-bits */
- kNoteEventType = 0x1L, /* lower 3-bits */
- kControlEventType = 0x2L, /* lower 3-bits */
- kMarkerEventType = 0x3L, /* lower 3-bits */
-
- kUndefined1EventType = 0x8L, /* 4-bits */
- kXNoteEventType = 0x9L, /* 4-bits */
- kXControlEventType = 0xAL, /* 4-bits */
- kKnobEventType = 0xBL, /* 4-bits */
- kUndefined2EventType = 0xCL, /* 4-bits */
- kUndefined3EventType = 0xDL, /* 4-bits */
- kUndefined4EventType = 0xEL, /* 4-bits */
- kGeneralEventType = 0xFL, /* 4-bits */
-
-
- kXEventLengthBits = 0x2L, /* 2 bits: indicates 8-byte event record */
- kGeneralEventLengthBits = 0x3L, /* 2 bits: indicates variable length event record */
-
- kEventLen = 1L, /* length of events in long words */
- kXEventLen = 2L,
- kRestEventLen = kEventLen,/* length of events in long words */
- kNoteEventLen = kEventLen,
- kControlEventLen = kEventLen,
- kMarkerEventLen = kEventLen,
- kXNoteEventLen = kXEventLen,
- kXControlEventLen = kXEventLen,
- kGeneralEventLen = kXEventLen,/* 2 or more, however */
-
- // Universal Event Defines
-
- kEventLengthFieldPos = 30, /* by looking at these two bits of the 1st or last word */
- kEventLengthFieldWidth = 2, /* of an event you can determine the event length */
- /* length field: 0 & 1 => 1 long; 2 => 2 longs; 3 => variable length */
-
- kEventTypeFieldPos = 29, /* event type field for short events */
- kEventTypeFieldWidth = 3, /* short type is 3 bits */
-
- kXEventTypeFieldPos = 28, /* event type field for extended events */
- kXEventTypeFieldWidth = 4, /* extended type is 4 bits */
-
- kEventPartFieldPos = 24,
- kEventPartFieldWidth = 5,
- kXEventPartFieldPos = 16, /* in the 1st long word */
- kXEventPartFieldWidth = 12,
-
- // Rest Events
-
- kRestEventDurationFieldPos = 0,
- kRestEventDurationFieldWidth = 24,
- kRestEventDurationMax = ((1L << kRestEventDurationFieldWidth) - 1),
-
- // Note Events
-
- kNoteEventPitchFieldPos = 18,
- kNoteEventPitchFieldWidth = 6,
- kNoteEventPitchOffset = 32, /* add to value in pitch field to get actual pitch */
-
- kNoteEventVolumeFieldPos = 11,
- kNoteEventVolumeFieldWidth = 7,
- kNoteEventVolumeOffset = 0, /* add to value in volume field to get actual volume */
-
- kNoteEventDurationFieldPos = 0,
- kNoteEventDurationFieldWidth = 11,
- kNoteEventDurationMax = ((1L << kNoteEventDurationFieldWidth) - 1),
-
- kXNoteEventPitchFieldPos = 0, /* in the 1st long word */
- kXNoteEventPitchFieldWidth = 16,
-
- kXNoteEventDurationFieldPos = 0, /* in the 2nd long word */
- kXNoteEventDurationFieldWidth = 22,
- kXNoteEventDurationMax = ((1L << kXNoteEventDurationFieldWidth) - 1),
-
- kXNoteEventVolumeFieldPos = 22, /* in the 2nd long word */
- kXNoteEventVolumeFieldWidth = 7,
-
- // Control Events
-
- kControlEventControllerFieldPos = 16,
- kControlEventControllerFieldWidth = 8,
-
- kControlEventValueFieldPos = 0,
- kControlEventValueFieldWidth = 16,
-
- kXControlEventControllerFieldPos = 0, /* in the 2nd long word */
- kXControlEventControllerFieldWidth = 16,
-
- kXControlEventValueFieldPos = 0, /* in the 1st long word */
- kXControlEventValueFieldWidth = 16,
-
- // Knob Events
-
- kKnobEventValueHighFieldPos = 0, /* 1st long word */
- kKnobEventValueHighFieldWidth = 16,
-
- kKnobEventKnobFieldPos = 16, /* 2nd long word */
- kKnobEventKnobFieldWidth = 14,
-
- kKnobEventValueLowFieldPos = 0, /* 2nd long word */
- kKnobEventValueLowFieldWidth = 16,
-
- // Marker Events
-
- kMarkerEventSubtypeFieldPos = 16,
- kMarkerEventSubtypeFieldWidth = 8,
- kMarkerEventValueFieldPos = 0,
- kMarkerEventValueFieldWidth = 16,
-
- // General Events
-
- kGeneralEventSubtypeFieldPos = 16, /* in the last long word */
- kGeneralEventSubtypeFieldWidth = 14,
-
- kGeneralEventLengthFieldPos = 0, /* in the 1st & last long words */
- kGeneralEventLengthFieldWidth = 16
- };
-
-
-
- #pragma output c
-
- // macros for extracting various fields from the QuickTime event records
-
- #define MASK(bitWidth) ((1L << (bitWidth)) - 1)
- #define EXT(val, pos, width) (((val) >> (pos)) & MASK(width))
-
- #define _EventLength(x) ((EXT(x, kEventLengthFieldPos, \
- kEventLengthFieldWidth) < 2) ? 1 : \
- ((EXT(x, kEventLengthFieldPos, kEventLengthFieldWidth) == 2) ? 2 : \
- EXT(x, kGeneralEventLengthFieldPos, kGeneralEventLengthFieldWidth)))
- #define _EventType(x) ((EXT(x, kEventTypeFieldPos, kEventTypeFieldWidth) > 3) ? EXT(x, kXEventTypeFieldPos, kXEventTypeFieldWidth) : EXT(x, kEventTypeFieldPos, kEventTypeFieldWidth))
-
- #define _RestDuration(x) (EXT(x, kRestEventDurationFieldPos, kRestEventDurationFieldWidth))
-
- #define _Part(x) (EXT(x, kEventPartFieldPos, kEventPartFieldWidth))
- #define _XPart(m, l) (EXT(m, kXEventPartFieldPos, kXEventPartFieldWidth))
-
- #define _NotePitch(x) (EXT(x, kNoteEventPitchFieldPos, kNoteEventPitchFieldWidth) + kNoteEventPitchOffset)
- #define _NoteVolume(x) (EXT(x, kNoteEventVolumeFieldPos, kNoteEventVolumeFieldWidth) + kNoteEventVolumeOffset)
- #define _NoteDuration(x) (EXT(x, kNoteEventDurationFieldPos, kNoteEventDurationFieldWidth))
- #define _NoteVelocity _NoteVolume
-
- #define _XNotePitch(m, l) (EXT(m, kXNoteEventPitchFieldPos, kXNoteEventPitchFieldWidth))
- #define _XNoteVolume(m, l) (EXT(l, kXNoteEventVolumeFieldPos, kXNoteEventVolumeFieldWidth))
- #define _XNoteDuration(m, l) (EXT(l, kXNoteEventDurationFieldPos, kXNoteEventDurationFieldWidth))
- #define _XNoteVelocity _XNoteVolume
-
- #define _ControlController(x) (EXT(x, kControlEventControllerFieldPos, kControlEventControllerFieldWidth))
- #define _ControlValue(x) (EXT(x, kControlEventValueFieldPos, kControlEventValueFieldWidth))
-
- #define _XControlController(m, l) (EXT(l, kXControlEventControllerFieldPos, kXControlEventControllerFieldWidth))
- #define _XControlValue(m, l) (EXT(m, kXControlEventValueFieldPos, kXControlEventValueFieldWidth))
-
- #define _MarkerSubtype(x) (EXT(x,kMarkerEventSubtypeFieldPos,kMarkerEventSubtypeFieldWidth))
- #define _MarkerValue(x) (EXT(x, kMarkerEventValueFieldPos, kMarkerEventValueFieldWidth))
-
- #define _KnobValue(m,l) ((EXT(m,kKnobEventValueHighFieldPos,kKnobEventValueHighFieldWidth) << 16) \
- | (EXT(l,kKnobEventValueLowFieldPos,kKnobEventValueLowFieldWidth)))
- #define _KnobKnob(m,l) (EXT(l,kKnobEventKnobFieldPos,kKnobEventKnobFieldWidth))
-
- #define _GeneralSubtype(m,l) (EXT(l,kGeneralEventSubtypeFieldPos,kGeneralEventSubtypeFieldWidth))
- #define _GeneralLength(m,l) (EXT(m,kGeneralEventLengthFieldPos,kGeneralEventLengthFieldWidth))
-
- #define _StuffRestEvent(x, duration) \
- x = (kRestEventType << kEventTypeFieldPos) \
- | ((long)(duration) << kRestEventDurationFieldPos)
-
- #define _StuffNoteEvent(x, part, pitch, volume, duration) \
- x = (kNoteEventType << kEventTypeFieldPos) \
- | ((long)(part) << kEventPartFieldPos) \
- | (((long)(pitch) - kNoteEventPitchOffset) << kNoteEventPitchFieldPos) \
- | (((long)(volume) - kNoteEventVolumeOffset) << kNoteEventVolumeFieldPos) \
- | ((long)(duration) << kNoteEventDurationFieldPos)
-
- #define _StuffControlEvent(x, part, control, value) \
- x = (kControlEventType << kEventTypeFieldPos) \
- | ((long)(part) << kEventPartFieldPos) \
- | ((long)(control) << kControlEventControllerFieldPos) \
- | ((long)((value) & MASK(kControlEventValueFieldWidth)) << kControlEventValueFieldPos)
-
- #define _StuffXNoteEvent(w1, w2, part, pitch, volume, duration) \
- w1 = (kXNoteEventType << kXEventTypeFieldPos) \
- | ((long)(part) << kXEventPartFieldPos) \
- | ((long)(pitch) << kXNoteEventPitchFieldPos), \
- w2 = (kXEventLengthBits << kEventLengthFieldPos) \
- | ((long)(duration) << kXNoteEventDurationFieldPos) \
- | ((long)(volume) << kXNoteEventVolumeFieldPos) \
-
- #define _StuffXControlEvent(w1, w2, part, control, value) \
- w1 = (kXControlEventType << kXEventTypeFieldPos) \
- | ((long)(part) << kXEventPartFieldPos) \
- | ((long)((value) & MASK(kXControlEventValueFieldWidth)) << kXControlEventValueFieldPos), \
- w2 = (kXEventLengthBits << kEventLengthFieldPos) \
- | ((long)(control) << kXControlEventControllerFieldPos)
-
- #define _StuffKnobEvent(w1, w2, part, knob, value) \
- w1 = (kKnobEventType << kXEventTypeFieldPos) \
- | ((long)(part) << kXEventPartFieldPos) \
- | ((long)(value >> 16) << kKnobEventValueLowFieldPos), \
- w2 = (kXEventLengthBits << kEventLengthFieldPos) \
- | ((long)(knob) << kKnobEventKnobFieldPos) \
- | ((long)(value & 0xFFFF) << kKnobEventValueLowFieldPos)
-
- #define _StuffGeneralEvent(w1,w2,part,subType,length) \
- w1 = (kGeneralEventType << kXEventTypeFieldPos) \
- | ((long)(part) << kXEventPartFieldPos) \
- | ((long)(length) << kGeneralEventLengthFieldPos), \
- w2 = (kGeneralEventLengthBits << kEventLengthFieldPos) \
- | ((long)(subType) << kGeneralEventSubtypeFieldPos) \
- | ((long)(length) << kGeneralEventLengthFieldPos)
-
-
- #pragma output all
-
- // General Event Defined Types
- enum {
- kGeneralEventNoteRequest = 1, /* Encapsulates NoteRequest data structure */
- kGeneralEventInstrument = 2, /* Encapsulates poly, typical poly, followed by InstrumentData record */
- kGeneralEventFlatInstrument = 3, /* Encapsulates poly, typical poly, followed by FlatInstrument record */
- kGeneralEventPartKey = 4,
- kGeneralEventTuneDifference = 5, /* Contains a standard sequence, with end marker, for the tune difference of a sequence piece */
- kGeneralEventAtomicInstrument = 6 /* Encapsulates AtomicInstrument record */
- };
-
-
-
- //∑#ifndef forMasterInterfaces
- #endif //__MusicTrackEvent__
- //∑#endif forMasterInterfaces
-